package com.ccp.dev.system.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.system.model.FileManagement;
import org.apache.ibatis.annotations.Mapper;
import com.ccp.dev.core.basic.web.query.QueryFilter;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

/**
 * file_management 信息数据库操作类
 *
 * @author zhaowj
 * @date 2020-03-22 14:11:51
 */
@Mapper
public interface FileManagementDao extends IBaseMapper<FileManagement, String> {

    List<FileManagement> queryAll(QueryFilter queryFilter);

    /**
     * 根节点条件查询数据
     *
     * @param map
     * @return
     */
    List<FileManagement> queryManageByCondition(Map map);

    /**
     * 获取树的节点和权限
     *
     * @param fileType 文件类型：1文件夹  2文件
     * @param parentType 父节点类型 1物理树目录节点 2逻辑归类树目录节点
     * @return 包含权限的文件对象list
     */
    List<FileManagement> getManageByCondition(@Param("fileType") int fileType, @Param("parentType") int parentType);

    /**
     * 通过动态条件获取信息
     *
     * @param paramMap 参数map
     * @return 文件对象
     */
    List<FileManagement> getFilesByCondition(Map<String, Object> paramMap);

    /**
     * 通过动态条件判断是否存在映射
     *
     * @param paramMap 参数map
     * @return 文件对象
     */
    List<FileManagement> queryExistMapping(Map<String, Object> paramMap);

    /**
     * 查询某节点下的分页数据
     *
     * @param queryFilter 查询条件
     * @return 分页数据
     */
    List<FileManagement> getFilesByFilterCondition(QueryFilter queryFilter);

    /**
     * 通过名称查询是否有重名内容
     *
     * @param paramMap 参数map
     * @return List<FileManagement> 名称、类型、扩展名且在同一目录下的文件/文件夹
     */
     List<FileManagement> getFileByFileName(Map<String, Object> paramMap);

    /**
     * 把同一个文件夹下大于等于此orderNumber的所有记录都加1
     * @param paramMap parentId 父节点id orderNumber 排序编号
     * @return
     */
    int updateOrderNumbers(Map<String, Object> paramMap);

    /**
     * 原文件名称和摘要修改了 对应的映射文件也要修改
     *
     * @param paramMap fileId:文件id  fileName:文件名称  fileKeywords:文件摘要
     * @return
     */
    int updateMappings(Map<String, Object> paramMap);

    /**
     * 修改物理树文件密级
     * @param remark 备注
     * @param fileSecretLevel 密级
     * @return
     */
    int updateFileSecretLevelToW(@Param("remark") String remark ,@Param("fileSecretLevel") int fileSecretLevel);

    /**
     * 修改逻辑树文件密级
     * @param remark 备注
     * @param fileSecretLevel 密级
     * @return
     */
    int updateFileSecretLevelL(@Param("remark") String remark ,@Param("fileSecretLevel") int fileSecretLevel);

    /**
     * 同时删除多条文件记录
     *
     * @param fileIds 文件/文件夹ID
     * @return
     */
    int deleteByIds(List fileIds) ;

    /**
     * 通过文件路径删除多条映射记录
     *
     * @param filePaths 文件路径
     * @return
     */
    int deleteByPaths(List filePaths) ;

}
